class ConsultasController < ApplicationController
  def index
  end

# OK
  def taxa_ocupacao
  	if params[:data_busca]
  		data = Date.civil(params[:data_busca][:year].to_i, params[:data_busca][:month].to_i, params[:data_busca][:day].to_i)
      data = data.to_datetime
  		quartos_ocupados = Hospedagem.where("created_at <= ? AND (data_encerramento >= ? OR aberta = ?)", data, data, true).count
  		total_quartos = Quarto.all.count

      logger.debug "Quartos ocupados: #{quartos_ocupados}"
      logger.debug "Total quartos: #{total_quartos}"
  		@taxa = Float(quartos_ocupados) / total_quartos
      render taxa_ocupacao_path
  	end
  end

# Aparentemente OK
  def evolucao_faturamento
  	if params[:meses]
      meses = ['Janeiro', 'Fevereiro', 'Marco', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro']
  		@faturamento = []
  		data_atual = Date.today
  		fim_mes_atual = ultimo_dia_mes data_atual.year, data_atual.month

  		for mes in 1..params[:meses].to_i
  			inicio_mes = fim_mes_atual.advance(:months => -(mes + 1) ) + 1
  			fim_mes = ultimo_dia_mes inicio_mes.year, inicio_mes.month

  			hospedagens = Hospedagem.where("data_encerramento IS NOT NULL AND date(data_encerramento) <= ?", fim_mes)
  			faturamento_mes = 0
  			hospedagens.each do |h|
  				faturamento_mes += h.custo_total
  			end
  			@faturamento << {:mes => meses[fim_mes.month - 1], :ano => fim_mes.year, :faturamento => faturamento_mes}
  		end
  	end
    render evolucao_faturamento_path
  end

# OK
  def busca_hospede
  	if params[:nome_hospede]
  		hospedes = Hospede.where("nome LIKE '%#{params[:nome_hospede]}%'")
      @resultados = []
      hospedes.each do |h|
        hospedagem = Hospedagem.abertas.where("hospede_id = ?", h.id)
        unless hospedagem.empty?
          @resultados << {:hospede => h, :quarto => Quarto.find(hospedagem[0].quarto_id)} 
        end
      end
  	end
    render busca_hospede_path
  end

  def top_servicos
  	if params[:limite]
      @top = Hash.new
  		melhores = Servico.all.sort_by { |serv| faturamento_servico(serv) }
  		melhores = melhores[0, params[:limite].to_i].reverse

      melhores.each do |m|
        @top[m.desc_curta] = faturamento_servico(m)
      end
  	end
    render servicos_faturamento_path
  end

  private
  def ultimo_dia_mes ano, mes
 	d = Date.new ano, mes
    d += 42 
    Date.new(d.year, d.month) - 1
  end

  private
  def faturamento_servico servico
  	faturamento = 0
  	fim_mes_anterior = (ultimo_dia_mes Date.today.year, Date.today.month).advance(:months => -1)
  	requisicoes = Requisicao.where("created_at <= ? AND servico_id = ?", fim_mes_anterior, servico.id)
  	unless requisicoes.empty?
	  	requisicoes.each do |r|
	  		faturamento += r.preco_unitario * r.qtd
	  	end
	  end

  	return faturamento
  end
end
